library(aspe)
library(tidyverse)
Les données ont été parsées depuis un dump (sauvegarde compressée) de la base Aspe (cf. ce tuto).
load(file = "raw_data/toutes_tables_aspe_sauf_mei.RData")
Le principe pour utiliser les tables de la base sql d’origine est de constituer un dataframe “passerelle” qui relie les tables d’origine par les identifiants de leurs objets (stations, points, opérations, lots, etc.). On peut ensuite compléter cette ossature par des jointures sur les champs contenant les identifiants. La démarche se retrouve systématiquement dans les traitements donc elle n’a été détaillée qu’une fois dans ce tuto.
On ne conserve que les pêches réalisées dans le cadre des réseaux, complètes et réalisées sans bateau, ce qui est simple avec les fonctions mef_select_obj(), mef_select_proto() et mef_select_mop(). On rajoute les dates de prospection et une variable annee, avec la fonction mef_ajouter_ope_date() pour permettre des agrégations annuelles.
On ajoute enfin des données de captures au niveau des lots (sans les mesures individuelles) avec mef_ajouter_lots().
data <- mef_creer_passerelle() %>% # création passerelle
mef_select_obj(objectif = 2:6) %>% # les obj 2 à 6 sont les réseaux
mef_select_proto(protocole = 1) %>% # pêches complètes
mef_select_mop(moyen_prospection = 1) %>% # à pied
mef_ajouter_ope_date() %>% # ajout date et année
mef_ajouter_lots() %>% # ajout des lots (effectif par espèce)
mef_ajouter_surf_calc() %>% # ajout des surfaces prospectées pour calculer les densités
mef_ajouter_libelle() # ajout libellé du point de prélèvement
captures <- data %>%
group_by(sta_id, pop_id, ope_id, ope_date, annee, esp_code_alternatif,
ope_surface_calculee, pop_libelle) %>%
summarise(effectif = sum(lop_effectif, na.rm = TRUE)) %>%
ungroup()
A ce stade on peut observer quelques lignes du tableau, tirées au hasard :
captures %>%
sample_n(10) %>%
knitr::kable(align = "c")
| sta_id | pop_id | ope_id | ope_date | annee | esp_code_alternatif | ope_surface_calculee | pop_libelle | effectif |
|---|---|---|---|---|---|---|---|---|
| 10977 | 43181 | 8112 | 2014-08-19 08:00:00 | 2014 | LPM | 495.00 | Dourduff à Garlan | 1 |
| 16932 | 61301 | 39635 | 2018-09-17 09:15:00 | 2018 | TRF | 924.12 | La Selves à Laguiole (station RCS et RHP 05121001) | 362 |
| 9513 | 36903 | 17175 | 2012-09-04 10:30:00 | 2012 | BOU | 1012.50 | Echandon à Saint-branchs | 143 |
| 22724 | 77725 | 39497 | 2018-09-12 10:00:00 | 2018 | TRF | 1522.50 | L’Aude au Clat | 550 |
| 22980 | 78460 | 35550 | 1996-07-22 09:30:00 | 1996 | LOF | 1026.63 | L’Orbieu à Ribaute | 112 |
| 236 | 1368 | 1577 | 2005-09-15 10:00:00 | 2005 | LPP | 1892.00 | La Hem à Recques sur Hem | 10 |
| 9309 | 35803 | 22834 | 1995-07-06 14:50:00 | 1995 | GOU | 770.50 | Tardes à Saint-silvain-bellegarde | 9 |
| 9933 | 39187 | 7952 | 2017-08-30 09:00:00 | 2017 | SPI | 657.00 | Merdereau à Saint-paul-le-gaultier | 115 |
| 8976 | 34085 | 23622 | 2015-07-07 09:30:00 | 2015 | CHA | 1141.00 | Desges à Desges | 74 |
| 23142 | 78977 | 34027 | 1993-06-24 09:30:00 | 1993 | GOU | 1276.00 | Le Lez à Castelnau-le-Lez | 2 |
Il s’agit ici d’opérer les étapes qui permettront un affichage spatialisé des données élémentaires (les points de prélèvement) ou agrégées sur un territoire qui peut être administratif (par exemple un département) ou hydrographique (un bassin hydro), voire un peu des deux (un SAGE). Les étapes seront :
Le découpage des bassins au sens de la DCE est téléchargeable depuis data.gouv.fr, au format GeoJSON ou shapefile.
Un découpage plus fin est disponible sur la page Zones hydrographiques - Métropole 2016 - BD Carthage du portail geo.data.gouv.fr et télécharger le shapefile à cette URL. La fonction sie_carthage_bassins_tod() du package {tod} permettent d’enchaîner le téléchargement, la décompression et la lecture de la couche shapefile proposée. Par défaut l’archive zip et les fichiers décompressés sont stockés dans un sous-répertoire "raw_data" qui est créé s’il ne pré-existe pas.
Comme notre étude est restreinte à la France continentale, l’ensemble des objets géographiques seront en Lambert 93 (EPSG:2154). Si l’on avait besoin de couvrir les outre-mers, on aurait choisi le WGS84 (EPSGG:4326).
bv <- tod::sie_carthage_bassins_tod(repertoire = "raw_data")
Les districts hydrographiques n’étant pas renseignés dans notre couche géographique, on a recours à de la donnée externe (un peu bidouillée - à voir comment obtenir plus sûr) pour agréger au niveau supérieur.
districts <- readxl::read_xlsx("raw_data/corresp_rh_dh.xlsx")
bv <- bv %>%
left_join(y = districts)
On peut alors créer les objets de classe sf qui permettront d’attribuer à chaque point son appartenance au découpage hydrographique à différentes échelles. Pour les besoins du présent projet, il faut que les sélections géographiques comprennent plusieurs stations d’échantillonnage, ce qui contraint la finesse du découpage. Ici, nous retenons les échelles des districts hydro subdivisés en * “régions hydro puis en secteurs hydrographiques. La fonction sie_carthage_bassins_agr() du package {tod} permet de regroupes les”zones hydro" en “secteurs hydro”, etc. . L’argument prop_pts_a_garder = 1 signifie que 100% des points sont conservés.
sh_geo <- bv %>%
tod::sie_carthage_bassins_agr(echelle = "Secteur_Hydro")
rh_geo <- bv %>%
tod::sie_carthage_bassins_agr(echelle = "Region_Hydro")
dh_geo <- bv %>%
tod::sie_carthage_bassins_agr(echelle = "District_Hydro")
Visualisation.
sh_geo %>%
ggplot() +
geom_sf()
Pour le découpage administratif, on part de la BD Admin Express mise à disposition par l’IGN. Après pas mal d’essais, pas réussi à décompresser l’archive avec la fonction unzip() de R base, d’où l’utilisation du package archive de Jim Hester (solution empruntée à T. Giraud).
Si nécessaire :
remotes::install_github("jimhester/archive")
Puis téléchargement et décompression des données.
150Mo environ \(\Rightarrow\) le téléchargement prend un peu de temps. Ne pas hésiter à réessayer en cas d’erreur, ça peut venir de la connexion ou du serveur.
url <- "https://www.data.gouv.fr/fr/datasets/r/989a9b36-e12a-4d28-a9b9-8eaf3955e8d3"
tf <- tempfile() # Création d'un nom de fichier temporaire
download.file(url, tf , mode = "wb") # Téléchargement
# Décompression dans un sous-répertoire
archive::archive_extract(archive::archive(path = tf),
dir = "raw_data/admin_express")
Fichiers shapefile des départements et des régions.
fichier_depts <- "raw_data/admin_express/ADMIN-EXPRESS-COG_2-1__SHP__FRA_2020-11-20/ADMIN-EXPRESS-COG/1_DONNEES_LIVRAISON_2020-11-20/ADE-COG_2-1_SHP_WGS84G_FRA/DEPARTEMENT_CARTO.shp"
fichier_regs <- "raw_data/admin_express/ADMIN-EXPRESS-COG_2-1__SHP__FRA_2020-11-20/ADMIN-EXPRESS-COG/1_DONNEES_LIVRAISON_2020-11-20/ADE-COG_2-1_SHP_WGS84G_FRA/REGION_CARTO.shp"
Lecture et reprojection en Lambert 93 comme le découpage hydrographique.
depts_geo <- sf::read_sf(fichier_depts) %>%
sf::st_transform(crs = 2154)
regs_geo <- sf::read_sf(fichier_regs) %>%
sf::st_transform(crs = 2154)
Visualisation
depts_geo %>%
filter(str_length(INSEE_DEP) == 2) %>% # métropole
ggplot() +
geom_sf()
Dans Aspe, l’entité spatiale de base, toujours identifiée, est le point de pêche. Tous sont géoréférencés, mais pas tous dans le même CRS. On va donc collecter les codes EPSG associés aux coordonnées de chacun des points, puis les reprojeter en Lambert 93.
Dans la table ref_type_projection, il apparaît que pour le Lambert II étendu, le code EPSG (27572) est manquant. Il faut donc la compléter (la version à venir de la base devrait voir cette ommission corrigée).
ref_type_projection <- ref_type_projection %>%
geo_completer_ref_type_projection()
pop <- point_prelevement %>%
rename(sta_id = pop_sta_id) %>% # nécessaire pour la jointure de mef_ajouter_libelle
mef_ajouter_libelle() %>%
geo_ajouter_crs(var_id_crs = "pop_typ_id") %>%
select(pop_id, pop_libelle, pop_coordonnees_x, pop_coordonnees_y, typ_code_epsg)
Conversion des coordonnées.
coords <- geo_convertir_coords_df(df = pop,
var_x = "pop_coordonnees_x",
var_y = "pop_coordonnees_y",
var_crs_initial = "typ_code_epsg",
crs_sortie = 2154) %>%
rename(x_l93 = X, y_l93 = Y)
Sélection d’une fenêtre de coordonnées couvrant la France continentale et transformation du dataframe des points en objet géographique de classe sf.
pop_geo <- pop %>%
bind_cols(coords) %>%
filter(x_l93 > 100000,
x_l93 < 1100000,
y_l93 > 6100000,
y_l93 < 7200000) %>%
sf::st_as_sf(coords = c("x_l93", "y_l93"), crs = 2154)
Visualisation d’un échantillon des points.
mapview::mapview(sample_n(pop_geo, 100), col.regions = "red") +
mapview::mapview(rh_geo)